﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics.Contracts;
using RmProto.Automata.IA;
using RmProto.Automata.CRA;
using System.Reflection;
using NetalBase.Reflection;
using NetalBase;
using Pifagor;

namespace RmProto
{
	class Program
	{
		static void Main(string[] args)
		{
			Tests.Tester.RunTests();

			return;

			//using (var ctx = new RmContext())
			//{
			//    var t1 = ctx.CreateTestAutomaton();
			//    var t2 = ctx.CreateTestAutomaton();
			//    var t3 = ctx.CreateTestAutomaton();

			//    t3.e_TA_init(null);
			//    t2.e_TA_init(t3);
			//    t1.e_TA_init(t2);

			//    t1.e_TA_run();
			//}

			//using (var ctx = new RmContext())
			//{
			//    ICRA res = ctx.CreateComputationalResource();

			//    IA i = ctx.CreateInterpretation();

			//    i.e_I_f((s) => Console.WriteLine(s));
			//    i.e_I_d("\tHello, world!");
			//    res.e_CR_cc();
			//    res.e_CR_init(i);
			//    i.e_I_p(res);
			//    if (ComputationalResource.InState<CRe>(res))
			//        res.e_CR_es();
			//    res.e_CR_fc();
			//}

			using (var ctx = new AutomataContext(true))
			{
				ICRA res = ctx.Create<ComputationalResource>();
				res.z_CR_e += (_) =>
					{
						res.e_CR_es();
						res.e_CR_fc();
					};

				res.z_CR_fin += (result) =>
					{
						res.e_CR_fc();
					};

				IA i = ctx.Create<Interpretation>();

				i.e_I_f((s) => Console.WriteLine(s));
				i.e_I_d("\tHello, world!");
				res.e_CR_cc();
				res.e_CR_init(i);
				i.e_I_p(res);
			}
		}
	}
}
